package com.work.studio.utils;

import android.app.Activity;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.Rect;
import android.util.DisplayMetrics;
import android.view.Display;
import android.view.View;
import android.view.WindowManager;

import java.lang.reflect.Method;

public class DisplayUtils {

	/**
	 * 获取手机屏幕真正的宽度
	 * @param activity
	 * @return
	 */
	public static float getScreenRealWidth(Activity activity) {
		float dpi = -1f;
		Display display = activity.getWindowManager().getDefaultDisplay();
		DisplayMetrics dm = new DisplayMetrics();
		@SuppressWarnings("rawtypes")
        Class c;
		try {
			c = Class.forName("android.view.Display");
			@SuppressWarnings("unchecked")
            Method method = c.getMethod("getRealMetrics", DisplayMetrics.class);
			method.invoke(display, dm);
			
			dpi = dm.widthPixels;
//			dpi = dm.widthPixels + "*" + dm.heightPixels;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return dpi;
	}
	
	/**
	 * 获取手机屏幕真正的高度
	 * @param activity
	 * @return
	 */
	public static float getScreenRealHeight(Activity activity) {
		float dpi = -1f;
		Display display = activity.getWindowManager().getDefaultDisplay();
		DisplayMetrics dm = new DisplayMetrics();
		@SuppressWarnings("rawtypes")
        Class c;
		try {
			c = Class.forName("android.view.Display");
			@SuppressWarnings("unchecked")
            Method method = c.getMethod("getRealMetrics", DisplayMetrics.class);
			method.invoke(display, dm);
			
			dpi = dm.heightPixels;
//			dpi = dm.widthPixels + "*" + dm.heightPixels;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return dpi;
	}
	
	/**
	 * 获取手机虚拟键盘的高度
	 * @param activity
	 * @return
	 */
	public static float getVirtualKeyBoardHeight(Activity activity){
		int height = -1;
		try {
			
			Resources resources = activity.getResources();
	        int resourceId = resources.getIdentifier("navigation_bar_height","dimen", "android");
	        //获取NavigationBar的高度
	        height = resources.getDimensionPixelSize(resourceId);
	        return height;
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		return height;
	}
	
	
	/**
	 * 获取手机显示内容区域的高度
	 * @param context
	 * @return
	 */
	public static float getWindowHeight(Activity context){
		
		float height = -1;
		try {
			
			DisplayMetrics metrics = new DisplayMetrics();
			
			context.getWindowManager().getDefaultDisplay().getMetrics(metrics);
			
			height = metrics.heightPixels;
			
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		
		return height;
		
	}
	
	/**
	 * 获取手机显示内容区域的宽度
	 * @param context
	 * @return
	 */
	public static float getWindowWidth(Activity context){
		
		float width = -1;
		try {
			
			DisplayMetrics metrics = new DisplayMetrics();
			
			context.getWindowManager().getDefaultDisplay().getMetrics(metrics);
			
			width = metrics.heightPixels;
			
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		
		return width;
		
	}
	
	/**
	 * 像素转换成dip
	 * @param context
	 * @param pix
	 * @return
	 */
	public static int pix2dip(Context context, float pix){
		
		if(context == null)
			return 0;
		float scale = context.getResources().getDisplayMetrics().density;
		return (int)(pix / scale + 0.5f);
	}
	
	/**
	 * dip转换成pix
	 * @param context
	 * @param dip
	 * @return
	 */
	public static int dip2pix(Context context, float dip){
		
		if(context == null)
			return 0;
		float scale = context.getResources().getDisplayMetrics().density;
		return (int)(dip * scale + 0.5f);
	}

	/**
	 * 获得屏幕高度
	 *
	 * @param context
	 * @return
	 */
	public static int getScreenWidth(Context context)
	{
		WindowManager wm = (WindowManager) context
				.getSystemService(Context.WINDOW_SERVICE);
		DisplayMetrics outMetrics = new DisplayMetrics();
		wm.getDefaultDisplay().getMetrics(outMetrics);
		return outMetrics.widthPixels;
	}

	/**
	 * 获得屏幕宽度
	 *
	 * @param context
	 * @return
	 */
	public static int getScreenHeight(Context context)
	{
		WindowManager wm = (WindowManager) context
				.getSystemService(Context.WINDOW_SERVICE);
		DisplayMetrics outMetrics = new DisplayMetrics();
		wm.getDefaultDisplay().getMetrics(outMetrics);
		return outMetrics.heightPixels;
	}

	/**
	 * 获得状态栏的高度
	 *
	 * @param context
	 * @return
	 */
	public static int getStatusHeight(Context context)
	{

		int statusHeight = -1;
		try
		{
			Class<?> clazz = Class.forName("com.android.internal.R$dimen");
			Object object = clazz.newInstance();
			int height = Integer.parseInt(clazz.getField("status_bar_height")
					.get(object).toString());
			statusHeight = context.getResources().getDimensionPixelSize(height);
		} catch (Exception e)
		{
			e.printStackTrace();
		}
		return statusHeight;
	}

	/**
	 * 获取当前屏幕截图，包含状态栏
	 *
	 * @param activity
	 * @return
	 */
	public static Bitmap snapShotWithStatusBar(Activity activity)
	{
		View view = activity.getWindow().getDecorView();
		view.setDrawingCacheEnabled(true);
		view.buildDrawingCache();
		Bitmap bmp = view.getDrawingCache();
		int width = getScreenWidth(activity);
		int height = getScreenHeight(activity);
		Bitmap bp = null;
		bp = Bitmap.createBitmap(bmp, 0, 0, width, height);
		view.destroyDrawingCache();
		return bp;

	}

	/**
	 * 获取当前屏幕截图，不包含状态栏
	 *
	 * @param activity
	 * @return
	 */
	public static Bitmap snapShotWithoutStatusBar(Activity activity)
	{
		View view = activity.getWindow().getDecorView();
		view.setDrawingCacheEnabled(true);
		view.buildDrawingCache();
		Bitmap bmp = view.getDrawingCache();
		Rect frame = new Rect();
		activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);
		int statusBarHeight = frame.top;

		int width = getScreenWidth(activity);
		int height = getScreenHeight(activity);
		Bitmap bp = null;
		bp = Bitmap.createBitmap(bmp, 0, statusBarHeight, width, height
				- statusBarHeight);
		view.destroyDrawingCache();
		return bp;

	}

}
